package com.zjw.core.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;

/**
 * 反射操作获取方法
 * */
public class ReflectMethodExample {

    public static void main(String[] args) {
        //    Class sonClass = Class.forName("com.zjw.core.reflect.Son");
        Class sonClass = Son.class;

        //调用 getMethods() 方法 获取 Son 类所有 public 访问权限的方法，包括从父类继承的（包括Object）
       // Method[] methods = sonClass.getMethods();

        //调用 getDeclaredMethods() 方法 获取 本类 Son 类所有方法(不问访问权限)
        Method[] methods = sonClass.getDeclaredMethods();

        for (int i = 0; i < methods.length; i++) {
            //获取并输出方法的访问权限（Modifiers：修饰符）
            int modifiers = methods[i].getModifiers();

            Class returnType = methods[i].getReturnType();

            Parameter[] parameters = methods[i].getParameters();

            for(Parameter parameter:parameters){
                System.out.print("方法的所有参数"+parameter.getName()+ " ");
            }

            System.out.print(returnType.getName() + " ");//返回方法的返回值对象类型
            System.out.print(Modifier.toString(modifiers) + " ");//返回方法的作用域
            System.out.println(methods[i].getName());//返回方法的方法名(包括本类和父类的所有方法名，Object,Father)
        }
    }
}
